package com.example.java8.feature_06;

import java.util.function.IntConsumer;
import java.util.function.IntUnaryOperator;
import java.util.stream.IntStream;

public class TestStream {

	public static void main(String[] args){
		test1();
	}
	
	/**
	 * 先创建一个IntStream，接下来分别调用IntStream的聚集方法执行操作，这样即可
	 * 获取流的相关信息。注意:下面聚集方法每次只能执行一行，因此需要把其它代码
	 * 注释掉。
	 * */
	public static void test1(){
		
		IntStream is = IntStream.builder()
				.add(20)
				.add(13)
				.add(-2)
				.add(18)
				.build();
		//下面调用聚集方法的代码每次只能执行一行
		//System.out.println("is所有元素的最大值：" + is.max().getAsInt());
		//System.out.println("is所有元素的最小值：" + is.min().getAsInt());
		//System.out.println("is所有元素的总和：" + is.sum());
		//System.out.println("is所有元素的总数：" + is.count());
		//System.out.println("is所有元素的平均值：" + is.average());
		//System.out.println("is所有元素的平方是否都大于20：" + is.allMatch(ele -> ele * ele > 20));
		//将is映射成一个新Stream，新Stream的每个元素是原Stream元素的2倍+1
		IntStream newIs = is.map(ele -> ele * 2 + 1);
		//使用方法引用的方式来遍历集合元素
		newIs.forEach(System.out :: println);
		
		/*
		 * 以上两行代码的Java7写法
		 * */
		IntStream newIs2 = is.map(new IntUnaryOperator() {
			
			@Override
			public int applyAsInt(int operand) {
				return operand * 2 +1;
			}
		});
		newIs2.forEach(new IntConsumer() {
			
			@Override
			public void accept(int value) {
				System.out.println(value);
			}
		});
	}
}
